package inc.jmc.cyberboard.ui.config.vo;

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;

import org.apache.log4j.Logger;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class OperacionesRequestBean implements java.io.Serializable{

 /**
	 * 
	 */
	private static final long serialVersionUID = -1791304898178756492L;
public static final int CAPTURAR_SNAPSHOT=0;
 public static final int RECIBIR_INFO_CONEXIONDB=1;
 public static final int BLOQUEAR_PC=2;
 public static final int DESBLOQUEAR_PC=3;
 public static final int RECIBIR_SNAPSHOT=4;
 public static final int REGISTRAR_CLIENTE_EN_SERVER=5;
 public static final int PEDIR_INFO_CONEXIONDB=6;
 public static final int RECIBIR_INI_CONTEO_TIEMPO=7;
 public static final int RECIBIR_FIN_CONTEO_TIEMPO=8;
 public static final int ENVIAR_INI_CONTEO_TIEMPO=9;
 public static final int ENVIAR_FIN_CONTEO_TIEMPO=10;
 
 static Logger logger = Logger.getLogger(OperacionesRequestBean.class.getName());
 
 private int operacion;
 private CcnetConfigBean config;
 public OperacionesRequestBean(CcnetConfigBean config) {
  this.config = config;
 }
 public OperacionesRequestBean() {
  
 }
 private byte[] imageArray;
 /**
  * @return the config
  */
 public CcnetConfigBean getConfig() {
  return config;
 }
 /**
  * @param config the config to set
  */
 public void setConfig(CcnetConfigBean config) {
  this.config = config;
 }
 /**
  * @return the operacion
  */
 public int getOperacion() {
  return operacion;
 }
 /**
  * @param operacion the operacion to set
  */
 public void setOperacion(int operacion) {
  this.operacion = operacion;
 }
 /**
  * @return the imageArray
  */
 public byte[] getImageArray() {
  return imageArray;
 }
 /**
  * @param imageArray the imageArray to set
  */
 public void setImageArray(byte[] imageArray) {
  this.imageArray = imageArray;
 }
 public void executeOperation() 
 {
  
  ///vamos a ejecutar la opcion que nos mandaron
  if(operacion==OperacionesRequestBean.CAPTURAR_SNAPSHOT)
  {
   capturaImagen();
  }
  if(operacion==OperacionesRequestBean.BLOQUEAR_PC)
  {
   String bloqueadorPath = this.getBloqueadorPath();
   Runtime run=Runtime.getRuntime();
   try {
	   logger.info("estamos corriendo este .bat"+bloqueadorPath);
	   run.exec(bloqueadorPath);
   } catch (IOException e) {
    e.printStackTrace();
   }
   
  }
  if(operacion==OperacionesRequestBean.DESBLOQUEAR_PC)
  {
   String desbloqueadorPath = this.getDesbloqueadorPath();
   logger.info("estamos corriendo este .bat"+desbloqueadorPath);
   Runtime run=Runtime.getRuntime();
   try {
    run.exec(desbloqueadorPath);
   } catch (IOException e) {
    e.printStackTrace();
   }
   
  }
  
 }
 public void capturaImagen()  {                                                      

     try{
         Robot robot=new Robot();
         Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
         BufferedImage buf=robot.createScreenCapture(new Rectangle(0,0,(int)screen.getWidth(),(int)screen.getHeight()));
         //ImageIcon imageIcon1=new ImageIcon(buf);
         //jLabel1.setIcon(imageIcon1);
         //jLabel1.setPreferredSize(new Dimension(buf.getWidth(),buf.getHeight()));
         //jScrollPane1.updateUI();
         salvarImagen( buf );
         
     }
     catch(Exception ex)
     {
      ex.printStackTrace();
     
     }
        
    }     
 
 protected void salvarImagen( BufferedImage buf )
    {
        FileOutputStream fos;
  try {
               //primero transformamos el bufferedImage en JPG     
      String path=getImagenPathFile();
               fos = new FileOutputStream(path);
               JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
               JPEGEncodeParam param=encoder.getDefaultJPEGEncodeParam(buf);
               param.setQuality(.99f,true);//calidad de imagen en porcentaje
               encoder.encode(buf);
               fos.close();
               
               ///luego leemos el jpg y lo escribimos al arreglo de bytes
               FileInputStream fis=new FileInputStream(path);
               imageArray=new byte[fis.available()];
               fis.read(this.imageArray);
               fis.close();
               
  } catch (FileNotFoundException e) {
   
   e.printStackTrace();
  } catch (IOException e) {
   
   e.printStackTrace();
  }
    
    }
 protected String getImagenPathFile()
    {
     //vamos a buscar el archivo para ver si esta o no guardado en disco 
  File file1=new File("");
  String path1 = null;
  try {
   path1 = file1.getCanonicalPath()+"\\opciones\\captura.jpg";
  } catch (IOException e2) {
   
   e2.printStackTrace();
  }
  return path1;
     
    }
 protected String getBloqueadorPath()
    {
     //vamos a buscar el archivo para ver si esta o no guardado en disco 
  File file1=new File("");
  String path1 = null;
  try {
   path1 = file1.getCanonicalPath()+"\\opciones\\locker.bat";
   String comand ="start "+file1.getCanonicalPath()+"\\opciones\\locker2.exe";
   FileWriter file=new FileWriter(path1);
   file.write(comand);
   file.close();
  }
  catch (IOException e2) {
   
   e2.printStackTrace();
  }
  return path1;
     
    }
 protected String getDesbloqueadorPath()
    {
	 
	 Runtime run=Runtime.getRuntime();
	   try {
	    Process exec = run.exec("tasklist");
	    InputStream inputStream = exec.getInputStream();
	    String a=new String();
	    byte[] b=new byte[inputStream.available()];
		inputStream.read(b);
		a=new String(b);
		logger.info("este es el resultadoo del tasklist");
		logger.info(a);
	   } catch (IOException e) {
	    e.printStackTrace();
	   }
	 
	 
     //vamos a buscar el archivo para ver si esta o no guardado en disco 
  File file1=new File("");
  String path1 = null;
  try {
   path1 = file1.getCanonicalPath()+"\\opciones\\unlocker.bat";
   String comand ="start taskkill /IM locker2.exe /f";
   FileWriter file=new FileWriter(path1);
   file.write(comand);
   file.close();
  }
  catch (IOException e2) {
   
   e2.printStackTrace();
  }
  return path1;
     
    }
}

